鬆口氣進入一個容易了解的演算排序~~通過反覆交換相鄰的元素,使較大的元素逐漸往右移動,較小的元素逐漸往左移動,從而將最大(或最小)的元素冒泡到最右端(或最左端)像氣泡在水中上升一樣
白話來說簡單易理解的旁邊兩倆比較按順序交換排序用於小型列表,但列表較大會慢的排序算法~~
進入迴圈:使用兩個嵌套的迴圈,外迴圈從列表的第一個元素遍歷到倒數第二個元素
比較相鄰元素:在內迴圈中,比較相鄰的兩個元素
Step1: 第一次遍歷(外迴圈)用第一個元素、第二個...再到最後倒數第二個元素
Step2: (內迴圈兩兩相比)進行交換:每一次外回圈的第一個元素大於其後一個元素,則進行交換
重複遍歷:繼續重複上述步驟,直到沒有進行過交換的元素,表示列表已經排序完成。
=> 第一次遍歷:
比較相鄰的元素,如果左邊的元素大於右邊的元素,則交換它們。
遍歷完一輪後,最大的元素將被移至列表的最右邊。
過程:[34, 25, 12, 22, 11, 64, 90]
=> 第二次遍歷:
再次遍歷列表,重複上述交換步驟。
這一次,第二大的元素會被移至列表的右邊第二個位置。
過程:[25, 12, 22, 11, 34, 64, 90]
重複以上步驟直到列表排序完成。
=> 過程:[12, 22, 11, 25, 34, 64, 90] (第三次遍歷)
=> 過程:[12, 11, 22, 25, 34, 64, 90] (第四次遍歷)
=> 過程:[11, 12, 22, 25, 34, 64, 90] (第五次遍歷)
=> 最終,列表 [11, 12, 22, 25, 34, 64, 90] 是按照升序排序完成。
def bubble_sort(arr):
n = len(arr)
# Step1: 第一次遍歷(外迴圈)用第一個元素、第二個...再到最後倒數第二個元素
for i in range(n):
# 最後 i 個元素已經排序完成,不需再檢查
# Step2: (內迴圈兩兩相比)進行交換:每一次外回圈的第一個元素大於其後一個元素,則進行交換
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
# 如果前一個元素大於後一個元素,進行交換
arr[j], arr[j+1] = arr[j+1], arr[j]
my_list = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(my_list)
print("排序後的列表:", my_list)